Traditional computer architectures include subsystems and components with different performance characteristics. For example, often-implemented computer architecture includes one or more central processing units (CPUs), memory, networking and disk storage subsystems, as well as USB peripherals. The performance characteristics often differ significantly between these types of devices, potentially by as much as orders of magnitude. To avoid significant performance bottlenecks due to the differing device performance characteristics, computing systems have historically implemented “caches”. A cache is a component that transparently stores data so that future requests for that data can be served faster.
In most computing systems only a single copy of cached data is maintained. Because the amount of cached data has increased dramatically, the consequences of losing the contents in cache has correspondingly become more serious. For example, many operating systems store cached copies of data in the memory subsystem, i.e., dynamic random access memory (DRAM), to act as an intermediary between the processor subsystem and the disk storage subsystem. If part of the memory subsystem storing cached data fails catastrophically, any cached data stored in the memory subsystem but not yet written to the disk drive would be lost.
It is in this context that embodiments of the invention arise.